Elasticsearch ক্লাস্টার এবং শার্ড ম্যানেজমেন্ট হলো Elasticsearch এর সবচেয়ে গুরুত্বপূর্ণ এবং জটিল অংশগুলোর মধ্যে একটি। এটি Elasticsearch এর পারফরম্যান্স, স্কেলেবিলিটি, এবং ডেটা ডিসট্রিবিউশন পরিচালনা করার ক্ষেত্রে বড় ভূমিকা পালন করে। নিচে Elasticsearch ক্লাস্টার এবং শার্ড ম্যানেজমেন্ট নিয়ে বিস্তারিত আলোচনা করা হলো:
Elasticsearch ক্লাস্টার হলো একটি বা একাধিক নোডের সমষ্টি যা একসাথে ডেটা ইনডেক্সিং, সার্চ এবং ডেটা ম্যানেজমেন্ট কার্য পরিচালনা করে। একটি ক্লাস্টার একটি ইউনিক Cluster Name দ্বারা পরিচিত, যা এর সমস্ত নোডের মধ্যে একই থাকে। ক্লাস্টারের মূল কিছু বৈশিষ্ট্য:
Elasticsearch এ ইনডেক্স করা ডেটাকে ছোট ছোট অংশে ভাগ করা হয়, যা Shard নামে পরিচিত। প্রতিটি শার্ড একটি লজিক্যাল ডিভিশন এবং এটি একটি সম্পূর্ণ ইন্ডিপেন্ডেন্ট ইউনিট। শার্ড এবং রেপ্লিকা ম্যানেজমেন্টের মাধ্যমে Elasticsearch ডেটা ডিসট্রিবিউশন, ফল্ট টলারেন্স এবং পারফরম্যান্স বজায় রাখে।
শার্ড কনফিগারেশন ইনডেক্স তৈরির সময় নির্ধারণ করা হয়, এবং এটি পরে পরিবর্তন করা যায় না। একটি ইনডেক্স তৈরি করার সময়, আপনি প্রাইমারি শার্ড এবং রেপ্লিকার সংখ্যা সেট করতে পারেন।
PUT /my-index
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
এখানে, my-index
ইনডেক্সটি ৩টি প্রাইমারি শার্ড এবং প্রতিটি প্রাইমারি শার্ডের ২টি করে রেপ্লিকা শার্ড নিয়ে গঠিত।
Elasticsearch ক্লাস্টারের প্রতিটি নোডে শার্ডগুলো বরাদ্দ (allocation) করা হয়। শার্ড বরাদ্দ এবং ব্যালেন্সিং ক্লাস্টারের স্ট্যাবিলিটি এবং পারফরম্যান্স বজায় রাখার জন্য গুরুত্বপূর্ণ।
Elasticsearch এর শার্ড ম্যানেজমেন্ট কনফিগারেশন কয়েকটি সেটিংসের মাধ্যমে নিয়ন্ত্রিত হয়:
all
, primaries
, new_primaries
, এবং none
এর মতো মান নিতে পারে।all
, primaries
, replicas
, এবং none
মান গ্রহণ করতে পারে।PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "all"
}
}
Elasticsearch ক্লাস্টারের স্বাস্থ্যের অবস্থা বিভিন্ন স্ট্যাটাসে রিপোর্ট করে:
ক্লাস্টারের স্বাস্থ্য চেক করার জন্য:
GET /_cluster/health
Elasticsearch এ ক্লাস্টার এবং শার্ড ম্যানেজমেন্ট হলো পারফরম্যান্স, ফল্ট টলারেন্স, এবং ডেটা ডিসট্রিবিউশন নিশ্চিত করার জন্য গুরুত্বপূর্ণ। শার্ডের সঠিক কনফিগারেশন এবং শার্ড বরাদ্দ ও ব্যালেন্সিং ক্লাস্টারের পারফরম্যান্স বজায় রাখতে সহায়ক। Shard management এর মাধ্যমে আপনি ডেটার স্ট্যাবিলিটি এবং কনসিস্টেন্সি নিশ্চিত করতে পারেন, এবং ক্লাস্টার স্কেল করা সহজ হয়।
Elasticsearch-এ Cluster Management এবং Nodes খুব গুরুত্বপূর্ণ দুটি কনসেপ্ট, যা ক্লাস্টারের স্থিতিশীলতা, পারফরম্যান্স, এবং স্কেলিং বজায় রাখতে সাহায্য করে। Elasticsearch একটি ডিস্ট্রিবিউটেড সার্চ ইঞ্জিন, যেখানে একাধিক নোড একসঙ্গে কাজ করে একটি ক্লাস্টার তৈরি করে এবং ডেটা ইনডেক্সিং, সার্চ, এবং বিশ্লেষণ কার্য পরিচালনা করে। ক্লাস্টার এবং নোড ম্যানেজমেন্টের মাধ্যমে আপনি ক্লাস্টারের স্থিতিশীলতা, শার্ড ম্যানেজমেন্ট, এবং নোড স্কেলিং পরিচালনা করতে পারেন।
Elasticsearch ক্লাস্টার হলো এক বা একাধিক নোডের সমষ্টি যা একসঙ্গে একটি ইউনিফাইড সার্চ এবং ডেটা প্রসেসিং ইঞ্জিন হিসেবে কাজ করে। প্রতিটি ক্লাস্টারের একটি ইউনিক Cluster Name থাকে, এবং ক্লাস্টারে থাকা প্রতিটি নোড একই ক্লাস্টার নেম শেয়ার করে।
Elasticsearch এ বিভিন্ন ধরণের নোড থাকে, প্রতিটির আলাদা ভূমিকা ও কাজ আছে:
Master Node:
node.master: true
Data Node:
node.data: true
Ingest Node:
node.ingest: true
Coordinating Node:
Voting-only Node:
node.voting_only: true
Elasticsearch ক্লাস্টার ম্যানেজ করার জন্য বিভিন্ন কমান্ড এবং API রয়েছে যা আপনাকে ক্লাস্টারের স্থিতিশীলতা এবং পারফরম্যান্স মনিটর করতে সাহায্য করে।
ক্লাস্টারের স্বাস্থ্যের অবস্থা জানার জন্য:
GET /_cluster/health
এটি ক্লাস্টারের তিনটি স্ট্যাটাস রিপোর্ট করে:
GET /_cat/nodes?v
এটি ক্লাস্টারের নোডগুলোর স্ট্যাটাস, রোল, এবং পারফরম্যান্স মেট্রিক্স প্রদর্শন করবে।
Elasticsearch ক্লাস্টার ম্যানেজমেন্টে শার্ড ম্যানেজমেন্ট এবং ক্লাস্টার স্কেলিং গুরুত্বপূর্ণ ভূমিকা পালন করে।
POST /_cluster/reroute
Elasticsearch ক্লাস্টারের কনফিগারেশন ডাইনামিকালি পরিবর্তন করা যায়, যেমন শার্ড বরাদ্দ বা ক্লাস্টারের ব্যালেন্সিং।
Shard Allocation Enable/Disable:
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "none"
}
}
Rebalance Settings:
PUT /_cluster/settings
{
"transient": {
"cluster.routing.rebalance.enable": "all"
}
}
Elasticsearch এ Cluster Management এবং Nodes এর সঠিক ম্যানেজমেন্ট ডেটা ডিসট্রিবিউশন, শার্ড ম্যানেজমেন্ট এবং ক্লাস্টারের পারফরম্যান্স ও স্থিতিশীলতা নিশ্চিত করতে সাহায্য করে। ক্লাস্টারের স্বাস্থ্য এবং শার্ড বরাদ্দ নিয়মিত মনিটর করে আপনি Elasticsearch কে অপ্টিমাইজ করতে এবং স্কেলিং পরিচালনা করতে পারবেন।
Shard এবং Replica দুটি ধারণা ডেটাবেস বা ডিস্ট্রিবিউটেড সিস্টেমে ব্যবহৃত হয় ডেটা ম্যানেজমেন্ট, স্কেলিবিলিটি, এবং ফল্ট টলারেন্স উন্নত করতে। এই ধারণাগুলো সাধারণত ডিস্ট্রিবিউটেড ডাটাবেস সিস্টেম, যেমন MongoDB, Elasticsearch, Cassandra, বা অন্যান্য NoSQL ডাটাবেসে বেশি ব্যবহৃত হয়। চলুন প্রতিটি ধারণা বিস্তারিতভাবে ব্যাখ্যা করি:
Shard হলো ডেটাবেসের একটি অংশ যা সম্পূর্ণ ডেটাবেসের একটি সাবসেট বা টুকরা ধারণ করে। শার্ডিং ব্যবস্থার মূল লক্ষ্য হলো একটি বড় ডেটাবেসকে ছোট ছোট অংশে ভাগ করে ডেটা স্টোরেজ এবং কুয়েরি পারফরম্যান্স উন্নত করা। এটি বিশেষভাবে কার্যকর যখন ডেটাবেসে অনেক ডেটা থাকে এবং তা একক সার্ভারে ধারণ করা সম্ভব নয় বা বাস্তবসম্মত নয়।
Replica হলো শার্ডের একটি কপি বা রেপ্লিকা যা সিস্টেমের বিভিন্ন নোডে সংরক্ষিত হয়। এটি মূলত ডেটার রিডান্ড্যান্সি এবং ফল্ট টলারেন্স নিশ্চিত করতে ব্যবহৃত হয়।
শার্ড (Shard) | রেপ্লিকা (Replica) |
---|---|
শার্ড হলো ডেটাবেসের একটি অংশ যা ডেটার একটি সাবসেট ধারণ করে। | রেপ্লিকা হলো শার্ডের একটি কপি, যা বিভিন্ন নোডে রাখা হয়। |
এটি ডেটাবেসের স্কেলিবিলিটি এবং পারফরম্যান্স বাড়াতে ব্যবহৃত হয়। | এটি ডেটার এভেইলেবিলিটি এবং ফল্ট টলারেন্স উন্নত করতে ব্যবহৃত হয়। |
প্রতিটি শার্ড আলাদা ডেটা ধারণ করে। | প্রতিটি রেপ্লিকা একটি নির্দিষ্ট শার্ডের কপি। |
Elasticsearch-এ শার্ড অ্যালোকেশন কনফিগার করার জন্য বেশ কিছু সেটিংস এবং প্যারামিটার আছে যা cluster এবং node level এ প্রভাব ফেলে। কিছু গুরুত্বপূর্ণ কনসেপ্ট ও কনফিগারেশন:
Cluster.routing.allocation.enable:
"all"
: সমস্ত প্রাইমারি এবং রেপ্লিকা শার্ড অ্যালোকেট করার অনুমতি দেয়।"primaries"
: শুধুমাত্র প্রাইমারি শার্ডগুলো অ্যালোকেট করা হয়।"new_primaries"
: নতুন প্রাইমারি শার্ড অ্যালোকেট করার অনুমতি দেয়।"none"
: কোনো শার্ডই অ্যালোকেট করা হবে না।Awareness Allocation:
rack_id
-তে বিতরণ করা হবে।{
"cluster.routing.allocation.awareness.attributes": "rack_id"
}
Allocation Filtering:
node-1
এ অ্যালোকেট হবে।{
"cluster.routing.allocation.include._name": "node-1"
}
Elasticsearch-এ Shard Rebalancing স্বয়ংক্রিয়ভাবে কাজ করে, কিন্তু কিছু সেটিংস আছে যা কাস্টমাইজ করা যায়:
Cluster.routing.rebalance.enable:
"all"
: সমস্ত শার্ড রিব্যালেন্স করা হয়।"primaries"
: শুধু প্রাইমারি শার্ডগুলো রিব্যালেন্স করা হয়।"replicas"
: শুধু রেপ্লিকা শার্ড রিব্যালেন্স করা হয়।"none"
: কোনো শার্ড রিব্যালেন্স করা হবে না।Rebalance Throttling:
cluster.routing.allocation.cluster_concurrent_rebalance
প্যারামিটারটি ব্যবহার করা যায়।{
"cluster.routing.allocation.cluster_concurrent_rebalance": 2
}
Disk-based Shard Allocation:
"cluster.routing.allocation.disk.threshold_enabled": true
"cluster.routing.allocation.disk.watermark.low": "85%"
(ডিফল্ট)"cluster.routing.allocation.disk.watermark.high": "90%"
(ডিফল্ট)GET /_cluster/health
দিয়ে ক্লাস্টারের হেলথ চেক করতে পারেন।GET /_cluster/allocation/explain
দিয়ে জানতে পারেন কেন কোনো শার্ড নির্দিষ্ট নোডে অ্যালোকেট হয়নি বা মুভ হয়নি।এভাবে Elasticsearch-এ shard allocation এবং rebalancing কনফিগার করা এবং মনিটর করা যায়, যা পারফরম্যান্স এবং রিলায়েবিলিটি নিশ্চিত করতে সাহায্য করে।
Elasticsearch ক্লাস্টারের হেলথ মনিটরিং এবং ট্রাবলশুটিং হল সিস্টেমের স্থিতিশীলতা এবং পারফরম্যান্স বজায় রাখার জন্য একটি অত্যন্ত গুরুত্বপূর্ণ কাজ। সঠিকভাবে মনিটরিং করলে দ্রুত সমস্যার সনাক্তকরণ এবং সমাধান সম্ভব হয়। এখানে Cluster Health Monitoring এবং Troubleshooting কিভাবে করতে হয় তার বিস্তারিত আলোচনা করা হলো।
Elasticsearch ক্লাস্টারের স্টেটাস তিনটি মেট্রিক্স দিয়ে নির্ধারণ করা হয়:
Cluster Health API:
GET /_cluster/health
{
"cluster_name": "my-cluster",
"status": "yellow",
"number_of_nodes": 5,
"number_of_data_nodes": 3,
"active_primary_shards": 50,
"active_shards": 95,
"relocating_shards": 0,
"initializing_shards": 2,
"unassigned_shards": 3
}
Cluster Stats API:
GET /_cluster/stats
Kibana Monitoring:
Elasticsearch ক্লাস্টারে বিভিন্ন ধরনের সমস্যা হতে পারে। নিচে সাধারণ কিছু সমস্যা এবং সমাধানের উপায় নিয়ে আলোচনা করা হলো:
elasticsearch.log
) কোনো এরর বা ওয়ার্নিং আছে কি না।GET /_cluster/allocation/explain
কমান্ড ব্যবহার করে শার্ড অ্যালোকেশন সমস্যার কারণ নির্ণয় করতে পারেন।GET /_cat/shards
কমান্ড ব্যবহার করে unassigned shards শনাক্ত করুন।GET /_cluster/allocation/explain
চালিয়ে কেন শার্ড অ্যালোকেট হয়নি তা বুঝে নিন।elasticsearch.log
বা নোডের লগ চেক করুন, যাতে কোনো specific error বা resource issue সনাক্ত করা যায়।cluster.routing.allocation.disk.watermark.high
এবং cluster.routing.allocation.disk.watermark.low
ঠিকভাবে সেট আছে কি না তা নিশ্চিত করুন।Set Up Alerts:
Regular Backups:
Check Cluster State API Regularly:
GET /_cluster/state
ব্যবহার করে ক্লাস্টারের বর্তমান স্টেট এবং ইন্ডেক্সের শার্ডের ডিস্ট্রিবিউশন মনিটর করতে থাকুন।Cat API: দ্রুত এবং সিম্পল ক্লাস্টার ইনফরমেশন পাওয়ার জন্য খুবই কার্যকর।
GET /_cat/health?v
: ক্লাস্টারের হেলথ সম্পর্কে বিস্তারিত তথ্য।GET /_cat/nodes?v
: নোডগুলোর স্ট্যাটাস এবং মেট্রিক্স।GET /_cat/indices?v
: সমস্ত ইন্ডেক্সের মেট্রিক্স এবং শার্ড ইনফরমেশন।Node Stats API:
GET /_nodes/stats
: নোডের CPU, মেমরি, ডিস্ক এবং অন্যান্য স্ট্যাটাস সম্পর্কে বিশদ বিবরণ।Elasticsearch-এর Cluster Health Monitoring এবং Troubleshooting সঠিকভাবে করতে পারলে সিস্টেমের স্থায়িত্ব এবং পারফরম্যান্স অনেকটাই নিশ্চিত করা সম্ভব। সঠিক কনফিগারেশন, মনিটরিং এবং ট্রাবলশুটিং কৌশল প্রয়োগ করে Elasticsearch ক্লাস্টারকে অপ্টিমাইজড ও স্কেলেবল অবস্থায় রাখা যায়।